<?php
declare(strict_types=1);

namespace app\service;

use think\facade\Log;

class LogService
{
    /**
     * 记录错误日志
     * @param string $module 模块名称
     * @param string $message 错误信息
     * @param array $context 上下文信息
     */
    public static function error(string $module, string $message, array $context = [])
    {
        $data = [
            'module' => $module,
            'message' => $message,
            'context' => $context,
            'timestamp' => date('Y-m-d H:i:s'),
            'trace' => debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)
        ];
        
        Log::error(json_encode($data, JSON_UNESCAPED_UNICODE));
    }
    
    /**
     * 记录信息日志
     * @param string $module 模块名称
     * @param string $message 日志信息
     * @param array $context 上下文信息
     */
    public static function info(string $module, string $message, array $context = [])
    {
        $data = [
            'module' => $module,
            'message' => $message,
            'context' => $context,
            'timestamp' => date('Y-m-d H:i:s')
        ];
        
        Log::info(json_encode($data, JSON_UNESCAPED_UNICODE));
    }
    
    /**
     * 记录调试日志
     * @param string $module 模块名称
     * @param string $message 日志信息
     * @param array $context 上下文信息
     */
    public static function debug(string $module, string $message, array $context = [])
    {
        if (!config('app.debug')) {
            return;
        }
        
        $data = [
            'module' => $module,
            'message' => $message,
            'context' => $context,
            'timestamp' => date('Y-m-d H:i:s')
        ];
        
        Log::debug(json_encode($data, JSON_UNESCAPED_UNICODE));
    }
    
    /**
     * 记录SQL日志
     * @param string $sql SQL语句
     * @param array $params 参数
     * @param float $time 执行时间
     */
    public static function sql(string $sql, array $params = [], float $time = 0.0)
    {
        if (!config('app.debug')) {
            return;
        }
        
        $data = [
            'module' => 'SQL',
            'sql' => $sql,
            'params' => $params,
            'time' => $time,
            'timestamp' => date('Y-m-d H:i:s')
        ];
        
        Log::sql(json_encode($data, JSON_UNESCAPED_UNICODE));
    }
    
    /**
     * 记录请求日志
     * @param string $url 请求URL
     * @param array $params 请求参数
     * @param mixed $response 响应内容
     * @param float $time 执行时间
     */
    public static function request(string $url, array $params, $response, float $time)
    {
        $data = [
            'module' => 'REQUEST',
            'url' => $url,
            'params' => $params,
            'response' => $response,
            'time' => $time,
            'timestamp' => date('Y-m-d H:i:s')
        ];
        
        Log::info(json_encode($data, JSON_UNESCAPED_UNICODE));
    }
    
    /**
     * 记录异常日志
     * @param \Throwable $e 异常对象
     * @param array $context 上下文信息
     */
    public static function exception(\Throwable $e, array $context = [])
    {
        $data = [
            'module' => 'EXCEPTION',
            'message' => $e->getMessage(),
            'code' => $e->getCode(),
            'file' => $e->getFile(),
            'line' => $e->getLine(),
            'trace' => $e->getTraceAsString(),
            'context' => $context,
            'timestamp' => date('Y-m-d H:i:s')
        ];
        
        Log::error(json_encode($data, JSON_UNESCAPED_UNICODE));
    }
} 